package com.cn.wanxi.servlet;

import com.cn.wanxi.model.CompanyModel;
import com.cn.wanxi.model.NavModel;
import com.cn.wanxi.model.NewsModel;
import com.cn.wanxi.service.CompanyService;
import com.cn.wanxi.service.NavService;
import com.cn.wanxi.service.NewsService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/home")//引号里面是访问地址
public class HomeServlet extends HttpServlet {
    /*
     * doget和dopost的区别
     * servlet的生命周期？
     * servlet3.0
     * */

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //公司信息
        CompanyService companyService = new CompanyService();
        CompanyModel companyModel = companyService.getCompanyModel();
        req.setAttribute("companyModel", companyModel);//key  value
//导航信息

        NavService navService = new NavService();
        //创建一个集合，集合的类型为NavModel
        List<NavModel> navModelList = navService.getNavModelList();
        req.setAttribute("navModelList", navModelList);//key  value
//新闻信息
        NewsService newsService = new NewsService();
        List<NewsModel> newsModelList = newsService.getNewsModelList();
        req.setAttribute("newsModelList", newsModelList);//key  value

        req.getRequestDispatcher("/jsp/home.jsp").forward(req, resp);//返回到哪一个页面，这个页面必须是jsp
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
    /**
     * 1.面向对象和面向过程区别？
     * 2.对象的组成部分？
     * 3.属性和方法   命名规则   完整的属性和方法定义
     * 4.servlet的层次关系 页面控制层（web层） 服务逻辑层（业务逻辑层） 数据实现层（数据访问层）
     * 5.Java的基本类型和引用类型   默认值，取值范围   所有引用类型默认值null
     * 6.jstl标签  el表达式
     * 7.web.xml配置
     * 8.servlet注解   ----  里面的值不能重复，必须唯一
     */
    /**
     * servlet页面控制层
     *   调用service NavService navService = new NavService();
     *   得到数据  List<NavModel> navModelList = navService.getNavModelList();
     *   将数据封装到req请求对象里面 req.setAttribute("navModelList", navModelList);//key  value
     *   返回页面
     *  service业务逻辑层  封装数据的逻辑
     *    因为要返回集合，所以创建一个空的集合
     *    所以需要便利   这里for循环   注意：条件不能写死，（长度）
     *    在循环里面需要封装NavModel ？数据在哪里来？ 在dao层
     *    将数据加入list里面，最后返回list
     *  dao数据实现层   定义数据
     *    数组：静态定义和动态定义
     *    构造方法和代码块和静态代码块
     *    类的执行顺序
     *  前端页面实现：
     *  c:forEach标签
     *  item  内容（${这里就是req里面的key值})
     *  var  集合里面的对象，可以随意命名
     *  varStatus  状态
     *   <a href="${navModel.href}">
     */
}
